29 research outputs found

    Human-Centric Program Synthesis

    Get PDF
    Program synthesis techniques offer significant new capabilities in searching for programs that satisfy high-level specifications. While synthesis has been thoroughly explored for input/output pair specifications (programming-by-example), this paper asks: what does program synthesis look like beyond examples? What actual issues in day-to-day development would stand to benefit the most from synthesis? How can a human-centric perspective inform the exploration of alternative specification languages for synthesis? I sketch a human-centric vision for program synthesis where programmers explore and learn languages and APIs aided by a synthesis tool

    From Theory to Systems: A Grounded Approach to Programming Language Education

    Get PDF
    I present a new approach to teaching a graduate-level programming languages course focused on using systems programming ideas and languages like WebAssembly and Rust to motivate PL theory. Drawing on students\u27 prior experience with low-level languages, the course shows how type systems and PL theory are used to avoid tricky real-world errors that students encounter in practice. I reflect on the curricular design and lessons learned from two years of teaching at Stanford, showing that integrating systems ideas can provide students a more grounded and enjoyable education in programming languages. The curriculum, course notes, and assignments are freely available: http://cs242.stanford.edu/f18

    Identifying Barriers to Adoption for Rust through Online Discourse

    Get PDF
    Rust is a low-level programming language known for its unique approach to memory-safe systems programming and for its steep learning curve. To understand what makes Rust difficult to adopt, we surveyed the top Reddit and Hacker News posts and comments about Rust; from these online discussions, we identified three hypotheses about Rust\u27s barriers to adoption. We found that certain key features, idioms, and integration patterns were not easily accessible to new users

    Debugging Trait Errors as Logic Programs

    Full text link
    Rust uses traits to define units of shared behavior. Trait constraints build up an implicit set of first-order hereditary Harrop clauses which is executed by a powerful logic programming engine in the trait system. But that power comes at a cost: the number of traits in Rust libraries is increasing, which puts a growing burden on the trait system to help programmers diagnose errors. Beyond a certain size of trait constraints, compiler diagnostics fall off the edge of a complexity cliff, leading to useless error messages. Crate maintainers have created ad-hoc solutions to diagnose common domain-specific errors, but the problem of diagnosing trait errors in general is still open. We propose a trait debugger as a means of getting developers the information necessary to diagnose trait errors in any domain and at any scale. Our proposed tool will extract proof trees from the trait solver, and it will interactively visualize these proof trees to facilitate debugging of trait errors.Comment: 9 pages, 2 figure

    A Core Calculus for Documents

    Full text link
    Passive documents and active programs now widely comingle. Document languages include Turing-complete programming elements, and programming languages include sophisticated document notations. However, there are no formal foundations that model these languages. This matters because the interaction between document and program can be subtle and error-prone. In this paper we describe several such problems, then taxonomize and formalize document languages as levels of a document calculus. We employ the calculus as a foundation for implementing complex features such as reactivity, as well as for proving theorems about the boundary of content and computation. We intend for the document calculus to provide a theoretical basis for new document languages, and to assist designers in cleaning up the unsavory corners of existing languages.Comment: Published at POPL 202

    A Grounded Conceptual Model for Ownership Types in Rust

    Full text link
    Programmers learning Rust struggle to understand ownership types, Rust's core mechanism for ensuring memory safety without garbage collection. This paper describes our attempt to systematically design a pedagogy for ownership types. First, we studied Rust developers' misconceptions of ownership to create the Ownership Inventory, a new instrument for measuring a person's knowledge of ownership. We found that Rust learners could not connect Rust's static and dynamic semantics, such as determining why an ill-typed program would (or would not) exhibit undefined behavior. Second, we created a conceptual model of Rust's semantics that explains borrow checking in terms of flow-sensitive permissions on paths into memory. Third, we implemented a Rust compiler plugin that visualizes programs under the model. Fourth, we integrated the permissions model and visualizations into a broader pedagogy of ownership by writing a new ownership chapter for The Rust Programming Language, a popular Rust textbook. Fifth, we evaluated an initial deployment of our pedagogy against the original version, using reader responses to the Ownership Inventory as a point of comparison. Thus far, the new pedagogy has improved learner scores on the Ownership Inventory by an average of 9% (N=342,d=0.56N = 342, d = 0.56).Comment: Published at OOPSLA 202

    The heuristics of narrativity in the works of Jean-Philippe Toussaint

    Get PDF
    This thesis analyses nine novels and two films by Jean-Philippe Toussaint, spanning the period from La Salle de bain (1985) to Nue (2013). Drawing on the hermeneutic phenomenology of Paul Ricoeur, it argues that Toussaint's texts can be fruitfully understood as representing fictionalised forms of reflexive narrativity. Through the close readings of the texts developed in this thesis, it is argued that Toussaint's anonymous fictional narrators are presented as both the readers and writers of their own lives, engaged in reimagining their own past experiences in ways which are heuristically motivated towards future possibilities for action, and that these reimaginings are represented both as and through the formal variations of the texts themselves. Also emphasised, however, is the way in which such refigurative narrative engagements are frequently depicted as deceptive or problematic. The first chapter, Self in the World, analyses La Salle de bain (1985), L'Appareil-photo (1988) and La Réticence (1991), focusing on the ways in which Toussaint's novels engage with thematic issues of subjectivity, identity, agency and the human capacity for reflexive narrativity. The second chapter, The Other in the Self, analyses two novels, Monsieur (1986) and La Télévision (1997), and two films, La Sévillane (1992) and La Patinoire (1999), focusing on the ways in which Toussaint's texts deploy various forms of ironic discourse in the critical mediation of the relationship between individual subjectivity and the exigencies of society, the workplace, and problems related to creative agency. The final chapter, Selfhood in the Other, analyses the novels of Toussaint's Marie tetralogy, Faire l’amour (2002), Fuir (2005), La Vérité sur Marie (2009), and Nue (2013), focusing on how this series interrogates philosophical questions of intersubjectivity by drawing on a number of historical conceptualisations of the aesthetic concept of the sublime
    corecore